package com.tt.payee.utils;

import org.apache.commons.lang3.RandomUtils;

import java.io.Serializable;
import java.util.Random;

public class ValidateSmsCodeUtil {  
    private static Validate validate = null;                  //验证码类，用于最后返回此对象，包含验证码图片base64和真值
    private static Random random = new Random();              //随机类，用于生成随机参数
    private static String randString = "0123456789";//随机生成字符串的取值范围  
    
    //将构造函数私有化 禁止new创建
    private ValidateSmsCodeUtil() {
		super();
	}
 
    /** 
     * 获取随机字符,并返回字符的String格式 
     * @param index (指定位置) 
     * @return 
     */  
    private static String getRandomChar(int index) {  
        //获取指定位置index的字符，并转换成字符串表示形式  
        return String.valueOf(randString.charAt(index));  
    }  
    /**
     * 获取随机指定区间的随机数 
     * @param min (指定最小数) 
     * @param max (指定最大数) 
     * @return 
     */
    private static int getRandomNum(int min,int max) { 
    	return RandomUtils.nextInt(min, max);
    }  
   
    public static Validate getRandomCode(int num) {  
    	validate = validate==null?new Validate():validate;
    	
    	//绘制字符  
        String randomString = "";  
        for(int i = 1; i <= num; i++) {  
        	String randChar = String.valueOf(getRandomChar(random.nextInt(randString.length())));  
            randomString += randChar;   //组装  
            validate.setValue(randomString);
        }   
        return validate;
    }  
    
    /**
     * 
     * @ClassName: Validate
     * @Description: 验证码类
     * @author chenhx
     * @date 2017年11月14日 上午11:35:34
     */
    public static class Validate implements Serializable{
    	private static final long serialVersionUID = 1L;
    	private String value;			//验证码值
    	
    	public String getValue() {
    		return value;
    	}
    	public void setValue(String value) {
    		this.value = value;
    	}
    }
    
    
    public static void main(String[] args) {
    	for(int i=0;i<1000;i++){
    		Validate v = ValidateSmsCodeUtil.getRandomCode(6);     //直接调用静态方法，返回验证码对象
        	if(v!=null){
        		System.out.println(v.getValue());
        	}
    	}
    	
	}
    
}  
